/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.model.dao.orm;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 *
 * @author Rdelacruz
 * @param <C>
 */
public class SesionImpl<C extends Key> {
    
    private final Map<String,C> mapObjetos = new HashMap<String,C>();
        
    public List<C> findAll() {
        List<C> lista = new ArrayList<C>();
        for(Map.Entry<String,C> e : mapObjetos.entrySet()) {
            lista.add(e.getValue());
        }
        return lista;
    } 
    
    public C findByKey(String key) {
        return mapObjetos.get(key);
    } 
    
    public C findByObjeto(Key objeto) {
        //System.out.println(this.getClass()+" HILO "+ThreadUtil.getIdentificadorHiloActual());
        return mapObjetos.get(objeto.getKey());
    }
    
    public C save(C objeto) {
        String key = objeto.getKey();
        mapObjetos.put(key, objeto);
        return mapObjetos.get(key);            
    }
    
    /**
     * 
     * @param objeto
     * @return Retorna el objeto en sesion con el key indicado
     */
    public C saveIfNotExists(C objeto) {                
        C objSesion = mapObjetos.get(objeto.getKey());
        if(objSesion==null) {//si no existe
            objSesion = save(objeto);
        }        
        return objSesion;
    }

    void clear() {
        mapObjetos.clear();
    }
}
